home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sun4c.md / openprom.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  4KB  |  133 lines

  1. /*
  2.  * @(#)openprom.h 1.2 89/05/10 SMI
  3.  * Copyright (c) 1989 Sun Microsystems, Inc.
  4.  *
  5.  *
  6.  * This file defines the interface between the Open Boot Prom Monitor 
  7.  * and the programs that may request its services.
  8.  * This interface, defined as a vector of pointers to useful things,
  9.  * has been traditionally referred to as `the romvec'.
  10.  * 
  11.  * The address of the romvec is passed as the first argument to the standalone
  12.  * program, obviating the need for the address to be at a known fixed location.
  13.  * Typically, the stand-alone's srt0.s file (which contains the _start entry)
  14.  * would take care of all of `this'.
  15.  * In SPARC assembler, `this' would be:
  16.  *
  17.  *    .data
  18.  *    .global _romp
  19.  * _romp: 
  20.  *    .word 0
  21.  *    .text
  22.  * _start:
  23.  *    set    _romp,%o1    ! any register other than %o0 will probably do
  24.  *    st    %o0,[%o1]    ! save it away
  25.  *    .......            ! set up your stack, etc......
  26.  */
  27.  
  28. #ifndef _mon_openprom_h
  29. #define    _mon_openprom_h
  30.  
  31. #ifndef _TYPES_
  32. #  include <sys/types.h>
  33. #endif _TYPES_
  34.  
  35. #ifndef OPENPROMS
  36. #  define OPENPROMS            /* for inquisitive minds */
  37. #endif  !OPENPROMS
  38. #define ROMVEC_MAGIC    0x10010407    /* hmmm */
  39. #define ROMVEC_VERSION     0
  40. #define PLUGIN_VERSION    0
  41. #define ROMVEC_BLKSIZE    512
  42.  
  43. extern struct sunromvec *romp;        /* as per the above discussion */
  44.  
  45. /*
  46.  * Memory layout stuff
  47.  */
  48. struct memlist {
  49.     struct memlist    *next;        /* link to next list element */
  50.     u_int        address;    /* starting address of memory segment */
  51.     u_int        size;        /* size of same */
  52. };
  53.  
  54.  
  55. struct sunromvec {
  56.     u_int        v_magic;      /* magic mushroom */
  57.     u_int              v_romvec_version; /* Version number of "romvec" */
  58.     u_int        v_plugin_version; /* Plugin Architecture version */
  59.     u_int        v_mon_id;      /* version # of monitor firmware */
  60.     struct memlist    **v_physmemory;      /* total physical memory list */
  61.     struct memlist    **v_virtmemory;      /* taken virtual memory list */
  62.     struct memlist    **v_availmemory;  /* available physical memory */
  63.     struct config_ops    *v_config_ops;      /* dev_info configuration access */
  64.     /*
  65.      * storage device access facilities
  66.      */
  67.     char        **v_bootcommand;  /* expanded with PROM defaults */
  68.     u_int        (*v_open)(/* char *name */);
  69.     u_int        (*v_close)(/* u_int fileid */); 
  70.     /*
  71.      * block-oriented device access
  72.      */
  73.     u_int        (*v_read_blocks)();
  74.     u_int        (*v_write_blocks)();
  75.     /*
  76.      * network device access
  77.      */
  78.     u_int        (*v_xmit_packet)();
  79.     u_int        (*v_poll_packet)();
  80.     /*
  81.      * byte-oriented device access
  82.      */
  83.     u_int        (*v_read_bytes)();
  84.     u_int        (*v_write_bytes)();
  85.  
  86.     /*
  87.      * 'File' access - i.e.,  Tapes for byte devices.  TFTP for network devices
  88.      */
  89.     u_int         (*v_seek)();
  90.     /*
  91.      * single character I/O
  92.      */
  93.     u_char        *v_insource;       /* Current source of input */
  94.     u_char        *v_outsink;        /* Currrent output sink */
  95.     u_char        (*v_getchar)();    /* Get a character from input */ 
  96.     void        (*v_putchar)();    /* Put a character to output sink.    */
  97.     int            (*v_mayget)();     /* Maybe get a character, or "-1".    */
  98.     int            (*v_mayput)();     /* Maybe put a character, or "-1".    */
  99.     /* 
  100.      * Frame buffer
  101.      */
  102.     void        (*v_fwritestr)();  /* write a string to framebuffer */
  103.     /*
  104.      * Miscellaneous Goodies
  105.      */
  106.     void        (*v_boot_me)();       /* reboot machine */
  107.     int            (*v_printf)();       /* handles format string plus 5 args */
  108.     void        (*v_abortent)();   /* Entry for keyboard abort. */
  109.     int         *v_nmiclock;       /* Counts in milliseconds. */
  110.     void        (*v_exit_to_mon)();/* Exit from user program. */
  111.     void        (**v_vector_cmd)();/* Handler for the vector */
  112.     void        (*v_interpret)();  /* interpret forth string */
  113.  
  114. #ifdef SAIO_COMPAT
  115.     struct bootparam    **v_bootparam;    /* boot parameters and `old' style device access */
  116. #else 
  117.     int            v_fill0;
  118. #endif SAIO_COMPAT
  119.  
  120.     u_int        (*v_mac_address)(/* int fd; caddr_t buf */);
  121.                         /* Copyout ether address */
  122.     int            *v_reserved[31];
  123.     /*
  124.      * Beginning of machine-dependent portion
  125.      */
  126. #include <machine/romvec.h>
  127. };
  128.  
  129. #define MONSTART    (*(romp->v_virtmemory))->address
  130. #define MONEND        (MONSTART+(*(romp->v_virtmemory))->size)
  131.  
  132. #endif _mon_openprom_h
  133.